簡而言之
CMakeLists.txt
就能產生 Ninja/makefiletarget_*
),CMake 會幫你轉換成各平台正確參數MSVC
、APPLE
、UNIX
、CMAKE_SYSTEM_NAME
等條件分支,必要時才做平台特例關鍵語法: project
、add_executable
、add_library
、target_include_directories
、target_link_libraries
、add_compile_options
、target_compile_definitions
、target_compile_features
、target_link_options
、install
關鍵語法:target_sources(FILE_SET HEADERS ...)
、add_custom_command(OUTPUT ...)
、add_custom_target
、add_dependencies
關鍵語法:include(CheckCXXCompilerFlag)
、check_cxx_compiler_flag
、try_compile
、set(CMAKE_*_COMPILER ...)
、CMAKE_SYSROOT
、CMAKE_FIND_ROOT_PATH*
關鍵語法:find_package
、include(FetchContent)
、FetchContent_Declare
、FetchContent_MakeAvailable
、find_package(PkgConfig)
、pkg_check_modules
# compile_commands.json:clangd/clang-tidy
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_library(core STATIC src/core.cpp)
target_include_directories(core PUBLIC ${CMAKE_SOURCE_DIR}/include)
add_executable(app src/main.cpp)
target_link_libraries(app PRIVATE core)
# 測試
include(CTest)
enable_testing()
add_executable(core_test tests/core_test.cpp)
target_link_libraries(core_test PRIVATE core)
add_test(NAME core_add_test COMMAND core_test)
關鍵語法:set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
、include(CTest)
、enable_testing
、add_test
關鍵語法:add_subdirectory
、target_include_directories
(PUBLIC/PRIVATE/INTERFACE)、target_link_libraries
(PUBLIC/...)、target_compile_definitions
、target_compile_features
關鍵語法:install(TARGETS ...)
、install(DIRECTORY ...)
、include(CPack)
、set(CPACK_*)
關鍵內建:CMakePresets.json
(不是指令,但 CMake 原生支援)
關鍵語法: option
、find_package(OpenMP)
、target_link_libraries
(Imported targets)